package com.whq.controller;

import com.whq.entity.User;
import com.whq.entity.User1;
import com.whq.utils.MD5Util;
import com.whq.utils.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by qpx on 2017/5/23.
 */
@Controller
@RequestMapping("/pay")
public class JDPayController {

    protected Logger logger = LogManager.getLogger(getClass());
    @RequestMapping("/toJDPay")
    public String toPay(ModelMap modelMap,String orderNo){
        //京东支付的参数
        String v_oid = orderNo;//订单号
        //从数据库中查找orderNo  是否存在，订单的状态
        String v_amount = "0.01";// 订单金额  数据库查询出来的
        String v_mid = "1001";// 1001是网银在线的测试商户号，商户要替换为自己的商户号。
        String v_url = "http://1078fa1.nat123.cc/pay/success";// 商户自定义返回接收支付结果的页面。对应Receive.jsp示例
        //参照"网银在线支付B2C系统商户接口文档v4.1.doc"中2.3.3.1
        String key = "test";// 参照"网银在线支付B2C系统商户接口文档v4.1.doc"中2.4.1进行设置。
        String remark2 =  v_url;//服务器异步通知的接收地址。对应AutoReceive.jsp示例。必须要有[url:=]格式
        remark2 = "[url:="+ remark2+"]";
        //以上三项必须修改
        String v_moneytype ="CNY";	                  				// 币种
        String text = v_amount+v_moneytype+v_oid+v_mid+v_url+key;   // 拼凑加密串
        String v_md5info = MD5Util.MD5Encode(text).toUpperCase();                 // 网银支付平台对MD5值只认大写字符串，所以小写的MD5值得转换为大写
//        Map<String,Object> jdPayParam = Maps.newHashMap();
        modelMap.put("v_md5info",v_md5info);
        modelMap.put("v_mid",v_mid);
        modelMap.put("v_oid",v_oid);
        modelMap.put("v_amount",v_amount);
        modelMap.put("v_moneytype",v_moneytype);
        modelMap.put("v_url",v_url);
        modelMap.put("remark2",remark2);
        modelMap.put("submitUrl","https://tmapi.jdpay.com/PayGate");
        return "jdPay";
    }


    @RequestMapping("/success")
    public String  success(HttpServletRequest request, HttpServletResponse response) throws IOException {

        logger.info("订单："+request.getParameter("v_oid")+"支付完成，开始修改数据库开始.....");
        logger.info("京东支付完成返回的订单号是:" + request.getParameter("v_oid"));
        logger.info("v_pstatus:"+request.getParameter("v_pstatus"));
        logger.info("v_pstring:"+request.getParameter("v_pstring"));
        logger.info("v_pmode:"+request.getParameter("v_pmode"));
        logger.info("v_md5str:"+request.getParameter("v_md5str"));
        logger.info("v_amount:"+request.getParameter("v_amount"));
        logger.info("v_moneytype:"+request.getParameter("v_moneytype"));

        //返回结果




        //第一步：校验MD5 加密串

        //第二步：验证订单是否存在

        //第三步：验证交易金额是否一致

        //第四步：验证数据库中订单状态是否是未支付。如果是未支付则修改程序，否则 直接返回 ok

        // update tb_order set status =1 where order_no = 订单号 and status = 0;
        //出现异常 则返回error 把异常信息保存到数据库中。


        //掉单怎样处理？？  支付通知5次后，不再发，程序还是有异常，需要有个定时任务，扫描支付方式是网银在线的未支付的订单，然后去调用查询接口，查看订单状态是否
        //已经支付，如果支付则需要修改订单状态等操作。

        response.getWriter().print("ok");
        logger.info("订单："+request.getParameter("v_oid")+"支付完成，开始修改数据库结束.....");

        return "success";
    }




    @RequestMapping("/getUserByID")
    @ResponseBody
    public User getList(String uid){

        if(StringUtils.isEmpty(uid)){
            User u = new User();
            u.setCode("10002 ");
            u.setMessage("uid不存在");
            return u;
        }
        User u = new User();
        u.setCode("1000");
        u.setMessage("查询成功");

        List<User1> user1List = new ArrayList<User1>();
        for(int i =0;i<10;i++){
            User1 user1 = new User1();
            user1.setTel("1351912783"+i);
            user1.setUid(i+"");
            user1.setUname("张三"+i);
            user1List.add(user1);
        }
        u.setData(user1List);
        return  u;
    }
}
